package rkdwogus7.basic;

import java.util.Scanner;
import java.util.concurrent.locks.ReadWriteLock;

import rkdwogus7.basic.J20_BookDBDAO;

public class J21_BookDBMain {
	
	private static final String TITLE = " -= BoodDB Program =- ";
	private static final String MENU = "(a) 추가, (b) 전체조회, (c) 상세조회, (d) 수정, (e) 삭제, (q) 종료";
	
	private static final String ADDMSG = "제목, 출판사, 저자 순으로 입력하세요";
	private static final String VIEWMSG = "상세 조회할 책번호를 입력하세요";
	private static final String UPDMSG = "수정할 책번호를 입력하세요";
	private static final String DELMSG = "삭제할 책번호를 입력하세요";
	
	// JDBC 서비스 클래스, 키보드 입력 클래스는 
	// 객체 생성 없이 바로 사용할 수 있도록 static으로 선언
	private static J20_BookDBDAO srv = new J20_BookDBDAO();
	private static Scanner sc = new Scanner(System.in);
	
	public static void main(String[] args) {
		System.out.println( TITLE );
		StringBuilder sb = new StringBuilder();
		while (true) {
			System.out.println( MENU );
			sb.append(sc.next());    // 한 번 밖에 안 돼. 이제 이유는 알겠어.
			switch (sb.toString()) { // 이거 어떻게 해결 해야 돼?
			case "a" : newBookDB();
				break;
			case "b" : readBookDB();
				break;
			case "c" : readOneBookDB();
				break;
			case "d" : modifyBookDB();
				break;
			case "e" : removeBookDB();
				break;
			case "q" : sc.close();
					 System.out.println( "Finish Program.." );
					 System.exit(0);
				break;
			
			}
			// sb.없애주는애
		}
		
		
	}
	// Main 클래스에서 DAO클래스의 method를 직접 호출하는 것은 OOP 개념에 다소 위배
	
	// 캡슐화와  보안, 유지/보수 관점에서 볼 때 서비스 객체를 하나 더 만들어
	// 그것을 통해 DAO클래스의 method를 호출하는 것이 더 나음
	
	// 즉, Main -> DAO 보다는 Main -> Service -> DAO 가 더 낫다는 이야기.
	
	// DAO 클래스의 method를 호출하는 Service method를 static으로 선언
	private static void newBookDB() {
		System.out.println(ADDMSG);
		J20_BookDBVO bvo = new J20_BookDBVO(sc.next(), sc.next(), sc.next());
		int cnt = srv.insertBookDB(bvo);
		if (cnt > 0) { System.out.println("추가성공!"); }
		// DAO에 너무 많은 책임을 지우기 싫어서.
	}
	private static void readBookDB() {
		System.out.println( srv.selectBookDB() );
	}
	private static void readOneBookDB() {
		System.out.println( srv.selectBookDB() );	// 전체를 한 번 보여주는거
		System.out.println( VIEWMSG );
		String id = sc.next();	// 상세 조회할 값 입력받고
		System.out.println( srv.selectBookDB(id) );
	}
	private static void modifyBookDB() {
		System.out.println( srv.selectBookDB() );	// 전체를 한 번 보여주는거
		System.out.println( UPDMSG );
		String id = sc.next();
		System.out.println(ADDMSG);
		J20_BookDBVO bvo = new J20_BookDBVO( sc.next(), sc.next(), sc.next() );
		bvo.setId(id);
		if ( srv.updateBookDB( bvo ) > 0 ) { System.out.println("수정완료!"); }
	}
	private static void removeBookDB() {
		System.out.println( srv.selectBookDB() );	// 전체를 한 번 보여주는거
		System.out.println( DELMSG );
		String id = sc.next();
		if ( srv.deleteBookDB( id ) > 0 ) { System.out.println("삭제완료!"); }
	}

}





